Software operating on computing systems can be implementing by a multitude of components that provide any number of different services and/or functionalities. Such components may utilize services and/or functionalities of other components and/or provide services and/or functionalities to other components. For example, a component that is configured to gather data may provide the gathered data to another component configured to perform some operations on the gathered data (e.g., clean the data, filter the data, manipulate the data, etc.). In such an example, the components are often hard-coded to communicate and interact with each other. That is, the components are bound to each other in a static fashion.